#ifndef _SofferBoundProkudin_H_
#define _SofferBoundProkudin_H_

//
// SofferBoundProkudin.h
//
// Created by TB on 11/23/11.
// Copyright 2011 BNL. All rights reserved.
//

#include "tppmc/Particle.h"
#include "tppmc/PartonDistribution.h"
#include "tppmc/PartonContent.h"

namespace tppmc {

   /**
    Soffer-bound transversity distribution based on XXX and YYY
    unpolarised and helicity PDFs.
    Utilises the FORTRAN PARPOLT subroutine from Alexei Prokudin.
    */
   class SofferBoundProkudin : public PartonDistribution {
      
   public:
      
      /**
       Valid orders.
       */
      enum Set {
         NLO = 1, LO = 2
      };
      
      /**
       Default constructor.
       Valid order codes are:
       <ol>
       <li>NLO. Requires file "transmaxnlo.grid".</li>
       <li>LO. Requires file "transmaxlo_new.grid".</li>
       </ol>
       */
      SofferBoundProkudin(int order = LO);
      
      virtual ~SofferBoundProkudin();
      
      /**
       Evaluate the distribution at the kinematic point of the parton
       at a given scale.
       Store the results for all parton flavours at that kinematic
       point in the PartonContent argument.
       */
      virtual void Evaluate(const pythpart&, double scale,
                            PartonContent&) const;

      /**
       Returns true if the distribution of the input parton type
       is supported by this function.
       */
      virtual bool Supports(const pythpart&) const;
      
      
      virtual std::string Name() const {
         return "Soffer bound from GRV98 and GRSV";
      }

   protected:
      
      int mOrder;
      
      ClassDef(tppmc::SofferBoundProkudin, 1)
   };
}

#endif
